package cn.jbolt.ai.app.service;

import cn.jbolt.ai.app.entity.AiApp;
import cn.jbolt.ai.app.entity.AiAppConfig;
import cn.jbolt.ai.app.vo.AccessConfigVO;
import cn.jbolt.ai.app.vo.AccessWebConfig;
import cn.jbolt.ai.app.vo.AiConfigVO;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.jbolt.util.Result;
import com.fasterxml.jackson.databind.JsonNode;

import java.util.List;

public interface AiAppConfigService extends IService<AiAppConfig> {


//    Result add(String linkType, Long linkId, String configKey, JsonNode configValue);

    Result add(String linkType, Long linkId, JsonNode config);

    Result update(String linkType, Long linkId,  String configValue);

    Result delete(Long id);



    /**
     * 获取某个节点最终生效的配置
     * @param appId
     * @param sessionId
     * @param nodeId
     * @return
     */
    JsonNode getNodeValidConfig(Long appId, Long sessionId, Long nodeId);

    /**
     * 根据linkid,linktype移除相关的配置
     * @param linkId
     * @param
     * @param linkType
     * @return
     */
    Result deleteByLinkId(String linkType, Long linkId);

    /**
     * 根据appid,移除相关的配置
     * @param appId
     * @param
     * @return
     */
    Result deleteByAppId(Long appId);

    /**
     * 根据NodeId,移除相关的配置
     * @param nodeIds
     * @param
     * @return
     */
    Result deleteByNodeId(List<Long> nodeIds);
    /**
     * 根据linkid,linktype移除相关的配置
     * @param linkId
     * @param
     * @param linkType
     * @return
     */
    Result deleteByLinkType(String linkType, List<Long> linkId);

    /**
     * 根据linkid,linktype查询相关的配置,并存入缓存
     *
     * @param linkType
     * @param linkId
     * @param
     * @return
     */
    JsonNode getConfig(String linkType, Long linkId);

    /**
     *根据关联类型,关联id,配置key三个条件获取相关的配置
     * @param linkType 关联类型
     * @param linkId 关联id
     * @param configKey 配置key
     * @return
     */
    Result getConfigByCondition(String linkType, Long linkId, String configKey);


    /**
     * 根据关联类型,关联id,配置类型三个条件获取相关的配置对象
     *
     * @param linkType  关联类型
     * @param linkId    关联id
     * @param configKey
     * @return
     */
    JsonNode getObjectConfigByCondition(String linkType, Long linkId, String configKey);

    /**
     * 移除functionConfig下的所有的id的相关资源
     * @param id
     * @return
     */
    Result delFuncConfigByFuncId(Long id);

    /**
     * 根据appId移除app相关的klbConfig中的klbId
     * @param klbId
     * @return
     */

    Result delConfigByKlbId(Long klbId);

    /**
     * 修改app的配置,只修改指定key的配置
     * @param linkType
     * @param linkId
     * @param configKey
     * @param configValue
     * @return
     */
    Result updateConfigByKey(String linkType, Long linkId, String configKey, String configValue);

    Result addConfigs(List<AiAppConfig> nodeConfigList);

    Result getConfigListByCondition(String linkType, Long linkId, List<String> configKey);

    Result updateConfigByBatch(AiConfigVO vo);

    /**
     * 只修改应用的发布中的相关配置
     * @param accessConfigVO
     * @return
     */
    Result updateAccessConfig(AccessConfigVO accessConfigVO);
    /**
     * 只获取应用的发布中的相关配置
     * @param appId
     * @return
     */
    Result<AccessConfigVO> getAccessConfigByAppId(Long appId);

    /**
     * 获取应用的发布中的相关配置
     * @param app
     * @return
     */
    AccessWebConfig getAccessWebConfig(AiApp app);
}
